我已经尝试了This solution来说
ALTER TABLE title
CHARACTER SET utf8
COLLATE utf8_unicode_ci;
好的,这里有一些屏幕截图可能对你有帮助。
更新
这是我插入日文字符时会发生什么。
更新2
显示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,这是实际'?'的十六进制代码而不是任何日文字符,这意味着没有日文字符存储
答案 0 :(得分:3)
您的表结构中混合了多个字符集。表本身使用utf8,但有问题的列使用拉丁语1.您可以通过这种方式定义它。只要您的列具有自己的字符集,就可以将表格或模式列更改一千次。它不会对您的专栏产生任何影响。因此,将列的字符集更改为默认值(使用表的字符串)或使用utf8明确表示。
当您更改列的charset时,现有数据将被转换(如果可能)。但错误的输入仍然是错误的,因此您必须重新填写数据。
答案 1 :(得分:0)
好的,我找到了原因
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
,问题解决了。
答案 2 :(得分:-1)
您必须将数据库归类设置为UTF-8
,而不仅仅是表归类:
以下是SQL脚本结果: