我正在努力将具有一堆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。
答案 0 :(得分:0)
答案是将sql_mode
设置为更自由的设置。具体而言,STRICT_TRANS_TABLES和NO_ENGINE_SUBSTITUTION似乎解决了这个问题。
您可以在SQL查询开始时执行以下命令来实现:
SET `sql_mode` = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';