我在MySQL中有一个表,其中包含以下列:
id name email address borningDate
我在HTML页面中有一个表单,它将此数据提交给servlet,负责将其保存在数据库中。由于charset问题(已经修复),我在尝试存储带重音的字母时保存了这样的行:
19 ? ? ? 2015-03-01
现在我要删除这一行。
是的,这样做:
DELETE FROM table WHERE id=19;
效果很好。我的遗嘱问题是:为什么,如果我尝试这样的事情:
DELETE FROM table WHERE name='?';
它返回0 rows affected
,就好像它不能将?
视为有效字符一样?
答案 0 :(得分:0)
尝试
SELECT id, HEX(name), HEX(email), HEX(address), borningDate FROM table
这将告诉您数据库中的实际内容。它可能实际上不是ASCII问号。当MySQL试图将列的字符集转换为连接的字符集时,问号可能是替换字符。
要更具体地管理它,请执行SHOW CREATE TABLE table
并查找用于文本列的字符集。这可能会在表定义的最后显示为DEFAULT CHARSET utf8
或类似的东西。但它可能在列定义中指定。
知道字符集后,发出命令SET NAMES charset
,例如SET NAMES utf8
。然后重新发出命令,看看你是否得到比?
替换字符更好的结果。当然,这假定您使用的客户端程序可以处理所提到的字符集。