SELECT `name` FROM `table` WHERE `id` = 'roman' GROUP by `name`
它返回一个空值,我确定代码是正确的,因为它适用于其他表。我注意到,如果我去桌面,删除id
值,然后再次手动输入,它可以正常工作(即使其余值看起来相同)。我的表格是从csv文件中导入的,但我确定我在行尾没有任何空格/字母/错误的字符等(甚至用HexEdit检查过)。例如,如果我使用:
SELECT `name` FROM `table` WHERE `id` LIKE 'roman%' GROUP by `name`
然后它起作用,所以看起来id值的某种方式出现了问题。我也试图改变字符集。
答案 0 :(得分:1)
最可能的解释是列中存储了一个不可打印的字符,可能是回车符,制表符或换行符。
要找出答案,请尝试获取存储值的十六进制表示和字节长度。
SELECT HEX('roman')
, LENGTH('roman')
, HEX(t.id)
, LENGTH(t.id)
FROM mytable t
WHERE t.id <> 'roman'
AND t.id LIKE 'roman%'
(可能会发生字符集转换。上面的相同查询会显示一些细节。)
在存储的值的末尾有一个回车符,十进制值13。比较:
SELECT HEX('roman\r')
HEX('roman\r')
----------------
726F6D616E0D
^^
要从id
列(而不仅仅是尾随列)中删除所有出现的回车符,您可以使用REPLACE
功能。
SELECT HEX(REPLACE('ro\rman\r','\r',''))
HEX(REPLACE('ro\rman\r','\r',''))
-----------------------------------
726F6D616E
在UPDATE语句中,例如
UPDATE mytable SET id = REPLACE(id,'\r','')
如果id
是.csv文件中的最后一个字段,那么该文件的行可能会以DOS样式结束,并带有回车符和换行符;并且读取输入文件的过程仅从换行符中删除,并将回车符保留为数据的一部分。
答案 1 :(得分:0)
看起来这是由csv导入引起的,上一列中的所有值都有一个额外的换行符号。我尝试过以下代码:
SELECT name
FROM table
WHERE id
LIKE&#39; roman _ &#39;分组name
所以它会&#34;跳过&#34;最后一个字符,仍然没有选择我的其他值,如:roman_string roman_string2等。也许它不是最好的解决方案,但它比花费大量时间重建csv导入脚本更好:)谢谢