尝试在MYSQL(InnoDB)中使用LOAD DATA INFILE命令时,我无法使编码工作。
"something","something else",\N,"ANOTHER","2012-05-05T19:54:03","2012-12-08T16:14:53","SOMETHING","Something","Hello","HIHI","HEY","999.0","0.01","0.25","06/2012",\N,"2012-06-28","2012-06-28","2012-06-28","2009-03-02","2012-06-28",\N,"LOLOL","","LOLNON",\N,
成为
獯浥瑨楮朢Ⱒ獯浥瑨楮朠敬獥 䅎佔䡅刢Ⱒ㈰ㄲⴰ㔭〵吱㤺㔴㨰㌢Ⱒ㈰ㄲⴱ㈭〸吱㘺ㄴ㨵㌢Ⱒ协䵅呈䥎䜢Ⱒ卯浥瑨楮朢Ⱒ䡥汬漢Ⱒ䡉䡉 䡅夢Ⱒ㤹㤮〢Ⱒ〮〱 \N \N ㈰ㄲⴰ㘭㈸ ㈰〹ⴰ㌭〲 ㈰ㄲⴰ㘭㈸ 䱏䱏䰢Ⱒ 0 0 \N \N \N \N \N \N \N \N \N \N \N \N \N \N
其他人也有类似的问题,通过将字符集设置为“utf8”来解决问题,就像我的一样。 (例如this one和this one)在任何问题或答案中都没有明确说明为什么utf8不能自动运行。
这看起来很奇怪,因为人们经常提到他们使用utf8作为默认编码,我在Notepad ++中使用UTF-8格式编码数据,默认排序规则为" utf8 - 默认排序规则&#34 ;。
我进一步查看,发现我的架构默认字符集为utf16
,默认排序规则为utf16_general_ci
。我相信MYSQL对LOAD DATA INFILE命令使用 架构 默认字符集和排序规则。
MYSQL是否使用架构字符集作为LOAD DATA INFILE
的默认值,如果是,那么哪些文档记录在案?如果没有,默认字符集来自哪里?
答案 0 :(得分:0)
基本上是的。
服务器使用character_set_database系统变量指示的字符集来解释文件中的信息。 SET NAMES和character_set_client的设置不影响输入的解释。如果输入文件的内容使用的字符集与默认值不同,通常最好使用CHARACTER SET子句指定文件的字符集。二进制字符集指定“无转换”。
,这是在documentation for LOAD DATA INFILE
的顶部附近找到的如果您动态设置该变量,那么您可以声称自己并未使用架构默认值,但这样做可以延伸这一点。