0

我正在将具有一堆 latin1 编码列的数据库转换为 utf8。在我迁移整个列之前,有一堆行编码错误,需要从 latin1 -> utf8 转换。我编写了一个脚本,该脚本使用以下查询识别有问题的行:

SELECT count(*) as count
FROM `user_profiles` 
WHERE CONVERT(CAST(`last_name` AS binary) USING utf8) IS NULL;

在本地,它返回 4,000 行的计数。当我在生产环境中运行它时,我得到一个带有 4,000 条警告的空结果。必须有一些设置告诉 MySQL 正常返回警告或我缺少的东西。有什么想法吗?

我已经尝试确保所有字符集变量都设置为 UTF8。服务器正在运行 mysql 5.5.29,我在本地运行 5.6.13。

4

1 回答 1

0

答案是将 设置sql_mode为更自由的设置。具体来说,STRICT_TRANS_TABLESNO_ENGINE_SUBSTITUTION似乎解决了这个问题。

您可以在 SQL 查询开始时执行以下命令来实现这一点:

SET `sql_mode` = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
于 2013-09-19T23:08:26.530 回答