不在 SQL table 中插入土耳其语字符。选择时显示 'xxx??xxx'
Not inserting Turkish characters in SQL table. Displays 'xxx??xxx' when selected
我想在我的 table 上添加土耳其名字,但是当显示时它给了我?而不是他们中的任何一个。对我在这里缺少的任何帮助吗?这是我的 table:
CREATE TABLE IF NOT EXISTS `offerings` (
`dep` varchar(5) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`grade` varchar(4) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`section` varchar(3) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`name` varchar(100) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`teacher` varchar(50) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`quota` varchar(2) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`lec1` varchar(35) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`lec2` varchar(35) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`lec3` varchar(35) DEFAULT NULL,
`lec4` varchar(35) DEFAULT NULL,
`lec5` varchar(35) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf16;
正如我在此处选择的答案所建议的那样,无论谁用谷歌搜索此主题,都是问题的解决方案。特别感谢所有为解决我的问题做出贡献的人。
CREATE TABLE IF NOT EXISTS `offerings` (
`dep` varchar(5) NOT NULL,
`grade` varchar(4) COLLATE utf8_unicode_ci NOT NULL,
`section` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
`name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`teacher` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`quota` varchar(2) COLLATE utf8_unicode_ci,
`lec1` varchar(35) DEFAULT NULL,
`lec2` varchar(35) DEFAULT NULL,
`lec3` varchar(35) DEFAULT NULL,
`lec4` varchar(35) DEFAULT NULL,
`lec5` varchar(35) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
VARCHARs是字符串,而NVARCHARS是Unicode字符串。 NVARCHARS 每个字符需要更多位来存储,但范围更大。尝试更新您的数据类型。这应该可以解决您的问题。
编辑 这个答案是错误的。 OP 明确要求 MySQL 解决方案,但以上仅适用于 SQL 服务器。
(答案开始...)
请不要使用utf16;在 MySQL table.
中几乎没有理由这样做
所以,假设您切换到 utf8,让我们看看是否可以解决 ?
问题。
utf8需要在4处左右建立
- 数据库中的列 -- 使用
SHOW CREATE TABLE
验证它们是否明确设置为 utf8,或者默认为 table 定义。 (改数据库default还不够。)
- 客户端和服务器之间的连接。参见
SET NAMES utf8
。
- 您拥有的字节数。 (大概是这样的)
- 如果要在网页中显示文本,请检查
<meta>
标记。
可能发生了什么:
- 你有 utf8 编码的数据(好)
SET NAMES latin1
生效(默认,但错误)
- 该列已声明
CHARACTER SET latin1
(默认,但错误)
由于 CHARACTER SET
不同意您所展示的内容,问题可能更复杂。请提供
SELECT col, HEX(col) FROM tbl WHERE ...
一些带有土耳其语字符的简单单元格。有了这个,我也许就能弄清楚发生了什么。
我想在我的 table 上添加土耳其名字,但是当显示时它给了我?而不是他们中的任何一个。对我在这里缺少的任何帮助吗?这是我的 table:
CREATE TABLE IF NOT EXISTS `offerings` (
`dep` varchar(5) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`grade` varchar(4) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`section` varchar(3) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`name` varchar(100) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`teacher` varchar(50) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`quota` varchar(2) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`lec1` varchar(35) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`lec2` varchar(35) CHARACTER SET utf16 COLLATE utf16_turkish_ci DEFAULT NULL,
`lec3` varchar(35) DEFAULT NULL,
`lec4` varchar(35) DEFAULT NULL,
`lec5` varchar(35) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf16;
正如我在此处选择的答案所建议的那样,无论谁用谷歌搜索此主题,都是问题的解决方案。特别感谢所有为解决我的问题做出贡献的人。
CREATE TABLE IF NOT EXISTS `offerings` (
`dep` varchar(5) NOT NULL,
`grade` varchar(4) COLLATE utf8_unicode_ci NOT NULL,
`section` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
`name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`teacher` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`quota` varchar(2) COLLATE utf8_unicode_ci,
`lec1` varchar(35) DEFAULT NULL,
`lec2` varchar(35) DEFAULT NULL,
`lec3` varchar(35) DEFAULT NULL,
`lec4` varchar(35) DEFAULT NULL,
`lec5` varchar(35) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
VARCHARs是字符串,而NVARCHARS是Unicode字符串。 NVARCHARS 每个字符需要更多位来存储,但范围更大。尝试更新您的数据类型。这应该可以解决您的问题。
编辑 这个答案是错误的。 OP 明确要求 MySQL 解决方案,但以上仅适用于 SQL 服务器。
(答案开始...)
请不要使用utf16;在 MySQL table.
中几乎没有理由这样做所以,假设您切换到 utf8,让我们看看是否可以解决 ?
问题。
utf8需要在4处左右建立
- 数据库中的列 -- 使用
SHOW CREATE TABLE
验证它们是否明确设置为 utf8,或者默认为 table 定义。 (改数据库default还不够。) - 客户端和服务器之间的连接。参见
SET NAMES utf8
。 - 您拥有的字节数。 (大概是这样的)
- 如果要在网页中显示文本,请检查
<meta>
标记。
可能发生了什么:
- 你有 utf8 编码的数据(好)
SET NAMES latin1
生效(默认,但错误)- 该列已声明
CHARACTER SET latin1
(默认,但错误)
由于 CHARACTER SET
不同意您所展示的内容,问题可能更复杂。请提供
SELECT col, HEX(col) FROM tbl WHERE ...
一些带有土耳其语字符的简单单元格。有了这个,我也许就能弄清楚发生了什么。