【发布时间】:2016-03-13 22:36:15
【问题描述】:
这是我的 sql:
INSERT INTO comments (createdate,userid,profileid,comment,status)
VALUES (1449503167,65704,65704,'@Mr_S66 Wish I was There For The Xmas Party I Miss My Studio 66 Family 😜',15)
这是我的 cmets 架构:
+------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+----------------+
| commentid | int(11) | NO | PRI | NULL | auto_increment |
| parentid | int(11) | YES | | 0 | |
| refno | int(11) | YES | | 0 | |
| createdate | int(11) | YES | | 0 | |
| remoteip | varchar(80) | YES | | | |
| locid | int(11) | YES | MUL | 0 | |
| clubid | int(11) | YES | | 0 | |
| profileid | int(11) | YES | MUL | 0 | |
| userid | int(11) | YES | MUL | 0 | |
| legacyuser | int(11) | YES | MUL | 0 | |
| mediaid | int(11) | YES | | 0 | |
| status | int(11) | YES | | 1 | |
| comment | varchar(4000) | YES | | | |
| likes | int(11) | YES | | 0 | |
| dislikes | int(11) | YES | | 0 | |
| import | int(11) | YES | | 0 | |
| author | varchar(50) | YES | | | |
+------------+---------------+------+-----+---------+----------------+
这是我对sql query 的输出:
ERROR 1366 (HY000):不正确的字符串值:'\xF0\x9F\x98\x9C' 用于第 1 行的列 'comment'
还不太清楚如何解决这个问题。可能过滤评论文本using php 以容纳字符串值。
【问题讨论】:
-
您在 MySQL 中的排序规则和字符集设置是什么?
-
@NullUserException 字符集是 latin1 并且排序规则名称是 latin1_swedish_ci 数据库是否正确?
-
你需要是utf8。那是一个表情符号; fileformat.info/info/unicode/char/1f61c/index.htm 或者你可以过滤它;不过,拥有所有角色可能会更好。这些可能会对您有所帮助 stackoverflow.com/questions/279170/utf-8-all-the-way-through 和 stackoverflow.com/questions/20411440/…
-
顺便说一句,实际上只有两个 VARCHAR 长度很重要:255 和 65535。最多 255 个字符的 VARCHAR 使用
strlen($value)+1字节进行存储,额外的字节存储字符串的长度。 VARCHARs 256-65535 个字符使用额外的字节作为长度。指定 255 或 65535 以外的值对性能或存储要求没有影响,但本质上只是完整性约束。