我有从拉丁语到utf-8转换的MySQL中文标记的问题。
我设置了所有变量
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
SET CHARACTER SET utf8mb4;
SET NAMES utf8mb4;
之后我执行脚本:
select id,convert(binary convert(`address` using latin1) using utf8mb4),address from users where id = 11111;
我收到了很好的结果:
所以现在我想更新这一行,所以我执行:
UPDATE `users` SET `address` = convert(binary convert(`address` using latin1) using utf8mb4) where id = 11111;
但在输出中我得到了信息:
1 row(s) affected, 1 warning(s): 1366 Incorrect string value: '\xE4\xB8\x80\xE4\xBA\x8C...' for column 'address' at row 1 Rows matched: 1 Changed: 1 Warnings: 1
然后我选择该用户的地址:'?????????''
请帮忙,
此致
答案 0 :(得分:2)
您观察到的行为(这里只是猜测)最可能的解释是列address
的字符集。
列定义包括列的字符集。如果在创建列时未指定字符集,则将其设置为表的默认字符集。如果在创建表时未指定表的默认字符集,则它将被设置为数据库的默认字符集。
ALTER DATABASE mydb CHARACTER SET
语句对已创建的表和列没有任何影响。指定的字符集将应用于未指定默认字符集的任何新创建的表。
我们可以SHOW CREATE TABLE users
查看address
列的字符集。
一点也不清楚你想要达到的目的。