即使数据库本身,客户端,连接,将数据加载到表中的文件等等都是utf8,我也一直无法获得正确显示utf8的表。 要么我错过了一些东西,其中一件事情不成立,或者我在这里错过了更大的东西。不,这一切都很好,因为我确实展示了后来的十六进制测试。保留其余的这个,因为我猜它可能有助于解决其他问题吗?说不上。
mysql> show variables like "char%";
+--------------------------+--------------------------+
| Variable_name | Value |
+--------------------------+--------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | C:\MySQL\share\charsets\ |
+--------------------------+--------------------------+
8 rows in set (0.00 sec)
对我来说很好看。 character_set_server是latin1,但我似乎无法在[mysqld]下的my.ini中使用原来,默认情况下有多个.ini用于Windows,它不一定加载到my.ini最后。只需要确保在正确的位置更改它。其他相对位,以防其他东西跳出错误:character-set-server=utf8
或character_set_server=utf8
进行更改。可能是问题,如果是这样,我猜我可能不得不在Windows本身改变一些东西?
CREATE TABLE `vocab` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`kanji` varchar(250) DEFAULT NULL,
`hiragana` varchar(250) DEFAULT NULL,
`english` varchar(250) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
我在上面显示的数据库中创建了这个表,然后使用LOAD DATA INFILE
命令加载了csv。 LOAD DATA INFILE在任何步骤或类似的事情中转换为另一个字符集吗?它没有,文件100%正常。
无论如何,这是我在命令行中得到的:
mysql> select kanji,hiragana,english from vocab where id=2;
+-------+----------+---------+
| kanji | hiragana | english |
+-------+----------+---------+
| 愛 | あい | love |
+-------+----------+---------+
1 row in set (0.00 sec)
是的,这些肯定是utf8字符,但不是正确的字符。不过,我再次重新检查是否理智,而csv实际上是utf8。
编辑:做了一些进一步的测试
mysql> select hiragana, HEX(hiragana),LENGTH(hiragana),CHAR_LENGTH(hiragana) FR
M vocab where id=2;
+----------+---------------+------------------+-----------------------+
| hiragana | HEX(hiragana) | LENGTH(hiragana) | CHAR_LENGTH(hiragana) |
+----------+---------------+------------------+-----------------------+
| πüéπüä | E38182E38184 | 6 | 2 |
+----------+---------------+------------------+-----------------------+
1 row in set (0.04 sec)
至少长度与char_length的比较似乎也是正确的,因为它是3:1。不仅如此,十六进制似乎也应该是平假名,这让我相信可能我正在使用的命令行客户端设置错误显示它或什么?
此外,在浏览器中测试它并正确显示字符。自十六进制讲述了足够多的故事以来,并不是真正必要的一步,但是嘿。
总结: