Mysql SQL列中的隐藏字符

Mysql SQL列中的隐藏字符,mysql,sql,utf-8,Mysql,Sql,Utf 8,我复制并粘贴了一条SQL语句,它只向表中添加了一列: ALTER TABLE `users` ADD COLUMN `favourites​` TEXT; 然而,在我复制和粘贴的地方,收藏夹名称有一些方法可以找到隐藏的字符 我在上面的例子中留下了隐藏的字符,让你看/不看它可能是什么样子 这是最受欢迎的?,上面似乎有一个问号 问题:我需要删除此列并手动重新添加,以便隐藏的字符不存在。问题是,我使用的任何SQL语句都无法识别列名收藏夹,因为隐藏字符,我不知道如何定位它 有人知道如何解决这个问题吗?

我复制并粘贴了一条SQL语句,它只向表中添加了一列:

ALTER TABLE `users` ADD COLUMN `favourites​` TEXT;
然而,在我复制和粘贴的地方,
收藏夹
名称有一些方法可以找到隐藏的字符

我在上面的例子中留下了隐藏的字符,让你看/不看它可能是什么样子

这是
最受欢迎的?
,上面似乎有一个问号

问题:我需要删除此列并手动重新添加,以便隐藏的字符不存在。问题是,我使用的任何SQL语句都无法识别列名
收藏夹
,因为隐藏字符,我不知道如何定位它


有人知道如何解决这个问题吗?

也许可以打开表的信息架构并从中复制列名?我不知道你在用哪个数据库。请更新以获取更多信息

如果您有权访问phpMyAdmin,或者如果您可以创建一个小脚本来运行此脚本:

SELECT COLUMN_NAME, FROM INFORMATION_SCHEMA.COLUMNS
  WHERE table_name = 'your_tbl_name'

并从页面复制列名

接下来,您可以使用

alter table your_tbl_name drop column column_name;
您已经知道如何在mysql中添加列,所以我想这应该可以解决您的问题


我希望你知道,如果你的声誉低于50,你不能发表评论,如果你没有提供足够的信息,那些实际上可能有答案的人,但是低于50的代表,将不得不在答案中发布它。或者,您是否希望将50名代表排除在候选名单之外,以帮助您?

删除您可以使用的列:

alter table <tblname> drop column <colname> 
做同样的用途显示

 SHOW COLUMNS FROM your_table;
获取列名,然后在delete命令中复制所需的列

 alter table your_table  drop column  your_column_copied
然后添加具有正确名称的列

alter table your_table  add column  your_column
否则,如果无法获取列名称,则可以使用create/select命令创建临时表,而不使用错误的列

create table (col1, col2, col3) 
select col1,col2, col3
from you_table  
然后删除原始表并重命名临时表,最后添加具有正确名称的列

一些可能性:

  • 使用phpmyadmin
  • 使用工具直接与数据库对话,如navicat等

您可以使用动态查询:

DECLARE @sql nvarchar(800)

SELECT @sql = 'ALTER TABLE users DROP COLUMN ' + COLUMN_NAME  
  FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'users' and COLUMN_NAME LIKE '%favour%'

EXEC sp_executesql @sql

您可以通过查询
INFORMATION\u SCHEMA
来获得列名,并使用获得的列名准备语句。大概是这样的:

DECLARE @StrangeColumnName NVARCHAR(16) := ''

SELECT @StrangeColumnName := COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'users' AND COLUMN_NAME LIKE 'favourites%'

DECLARE @SqlText NVARCHAR(32) := 'ALTER TABLE status DROP COLUMN ?'  
EXECUTE @SqlText USING @StrangeColumnName

我已经更新了答案。。有一个小小的建议,不太清楚你为什么对答案投反对票,在这里试图帮助你的人需要做一些猜测,当然答案可能根本不起作用。OP暗示的是基于MySQL的解决方案,而不是MS SQL Server<代码>sp_executesql在MySQL中不可用。不管怎么说,想法不错……选择
HEX(列名)
,这样我们就可以找出问题所在。
DECLARE @sql nvarchar(800)

SELECT @sql = 'ALTER TABLE users DROP COLUMN ' + COLUMN_NAME  
  FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'users' and COLUMN_NAME LIKE '%favour%'

EXEC sp_executesql @sql
DECLARE @StrangeColumnName NVARCHAR(16) := ''

SELECT @StrangeColumnName := COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'users' AND COLUMN_NAME LIKE 'favourites%'

DECLARE @SqlText NVARCHAR(32) := 'ALTER TABLE status DROP COLUMN ?'  
EXECUTE @SqlText USING @StrangeColumnName