【问题标题】:View Japanese Characters in MySQL Workbench在 MySQL Workbench 中查看日文字符
【发布时间】:2014-06-27 07:54:17
【问题描述】:

我已经尝试过This solution,上面写着

ALTER TABLE title 
CHARACTER SET utf8
COLLATE utf8_unicode_ci;

好的,这里有一些屏幕截图可能会对您有所帮助。

更新

这是我插入日文字符时发生的情况。



更新 2

Show create table 给出了这个

CREATE TABLE `productInfo` (
  `pID` int(11) NOT NULL AUTO_INCREMENT,
  `pOperation` varchar(40) CHARACTER SET latin1 DEFAULT NULL,
  `year` year(4) DEFAULT NULL,
  `season` varchar(10) CHARACTER SET latin1 DEFAULT NULL,
  `pName` varchar(40) CHARACTER SET latin1 DEFAULT NULL,
  `category` varchar(40) CHARACTER SET latin1 DEFAULT NULL,
  `margin1` text CHARACTER SET latin1,
  `margin2` text CHARACTER SET latin1,
  PRIMARY KEY (`pID`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

只是看到 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
但现在看到查询

SELECT character_set_name, collation_name
FROM information_schema.columns
WHERE table_schema = 'trac_data'
    AND table_name = 'productInfo'
    AND column_name = 'pOperation';

给予

character_set_name collation_name

'latin1'            'latin1_swedish_ci'

这很奇怪!

更新 3

SELECT hex(pOperation),pOperation FROM trac_data.productInfo;

给了 3F3F3F3F3F 这是实际“?”的十六进制代码而不是任何日文字符,这意味着没有日文字符被存储

【问题讨论】:

    标签: mysql utf-8 character-encoding mysql-workbench


    【解决方案1】:

    您的表结构中有多种字符集。该表本身使用 utf8,但有问题的列使用 latin 1。您已经以这种方式定义了它。只要您的列有自己的字符集,您就可以将表或模式的列更改一千次。它不会对您的列产生任何影响。因此,改为将列的字符集更改为默认值(以使用表的字符集)或显式使用 utf8。

    当您更改列的字符集时,现有数据将被转换(如果可能)。但是您的错误输入仍然是错误的,因此您必须再次填写数据。

    【讨论】:

      【解决方案2】:

      好的,我找到了原因

      CREATE TABLE `productInfo` (
        `pID` int(11) NOT NULL AUTO_INCREMENT,
        `pOperation` varchar(40) CHARACTER SET latin1 DEFAULT NULL,
        `year` year(4) DEFAULT NULL,
        `season` varchar(10) CHARACTER SET latin1 DEFAULT NULL,
        `pName` varchar(40) CHARACTER SET latin1 DEFAULT NULL,
        `category` varchar(40) CHARACTER SET latin1 DEFAULT NULL,
        `margin1` text CHARACTER SET latin1,
        `margin2` text CHARACTER SET latin1,
        PRIMARY KEY (`pID`)
      ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
      

      我注意到每列前面的 SET latin1 是如何出现的。
      所以我改成了sjis,问题就解决了。

      【讨论】:

      • 这就是我在回答中所写的。我看不到这个额外的答案有任何用处。此外,字符集信息不在前面,而是(几乎)在列定义的末尾(仅后面跟着默认值),其次,您已将表定义为使用 utf8。您不应该创建单列然后使用不太灵活的字符集。相反,完全删除 charset 子句,使列使用表的字符集(此处为 utf8)。
      【解决方案3】:

      您必须将数据库排序规则设置为UTF-8,而不仅仅是表排序规则:

      这是 SQL 脚本结果:

      【讨论】:

      • 看第一张图,我想你错过了
      • -1:模式字符集完全不相关,除非您已将表字符集设置为使用模式默认值。一旦你设置了一个表字符集甚至一个单独的列字符集,模式字符集就无关紧要了。此外,您的屏幕截图来自建模,而不是 SQL IDE:
      • 如果您将数据库设置为使用 UTF-8 排序规则,则表/列将采用 UTF-8 格式(因为它将使用架构的默认排序规则)。我认为默认设置一个 UTF-8 排序规则是一件好事。好吧,这是我的个人经历,也许我错了。 ;)
      • 我不认为 OP 使用 SQL IDE,他使用建模的插入选项卡(我有时只需单击两次应用按钮就会崩溃......我没有知道为什么?)。但也许我不明白你所说的 SQL IDE 是什么? ;)
      猜你喜欢
      • 1970-01-01
      • 2011-06-15
      • 2011-05-19
      • 2018-02-08
      • 2011-10-15
      • 2023-02-05
      • 1970-01-01
      • 2019-04-10
      • 2014-07-28
      相关资源
      最近更新 更多