【问题标题】:Hidden character in SQL columnSQL 列中的隐藏字符
【发布时间】:2016-07-22 08:12:25
【问题描述】:

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

ALTER TABLE `users` ADD COLUMN `favourites​` TEXT;

但是,在我复制和粘贴的地方,favourites 名称有一些如何设法拾取隐藏字符。

我已将上例中的隐藏字符留给您看/看不到!

它是favourites?,带有一个问号。

问题:我需要删除此列并手动重新添加它,以便隐藏字符不存在。问题是我所做的任何 SQL 语句,由于隐藏字符,它无法识别列名favourites,我不知道如何定位它。

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

【问题讨论】:

  • 不太清楚你为什么对答案投反对票,在这里试图帮助你的人需要做一些猜测,自然答案可能根本不起作用。

标签: mysql sql utf-8


【解决方案1】:

同样使用show

 SHOW COLUMNS FROM your_table;

获取列名,然后在删除命令中复制您需要的列

 alter table your_table  drop column  your_column_copied

并添加具有正确名称的列

alter table your_table  add column  your_column

否则,如果无法获取 column_name,您可以使用 create/select 命令创建一个没有错误列的临时表

create table (col1, col2, col3) 
select col1,col2, col3
from you_table  

然后删除原始表并重命名临时表,最后添加正确名称的列

【讨论】:

  • 我已经更新了答案.. 用一个琐碎的建议
【解决方案2】:

您可以使用动态查询:

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

【讨论】:

  • OP 意味着基于 MySQL 的解决方案,而不是 MS SQL Server。 sp_executesql 在 MySQL 中不可用。反正想法不错……
【解决方案3】:

您可以通过查询INFORMATION_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

【讨论】:

  • 选择 HEX(COLUMN_NAME) 以便我们找出问题所在。
【解决方案4】:

也许打开表的信息架构并从那里复制列名?我不知道您使用的是哪个数据库。请更新以获取更多信息。

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

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

SHOW COLUMNS
  FROM 'your_tbl_name

并从页面中复制列名。

接下来,您可以使用

删除该列
alter table your_tbl_name drop column column_name;

而且您已经知道如何在 mysql 中添加列,所以我想这应该可以解决您的问题。

我希望你知道,如果你的声望低于 50,并且如果你没有提供足够的信息,那么那些实际上可能会为你提供答案但声望低于 50 的人将会有将其发布在答案中。或者你想淘汰那些 50 代表作为帮助你的候选人?

【讨论】:

    【解决方案5】:

    要删除列,您可以使用:

    alter table <tblname> drop column <colname> 
    

    然后在删除列后,您可以通过编写以下代码来添加列:

    ALTER TABLE users ADD COLUMN favourites​ TEXT;
    

    【讨论】:

      【解决方案6】:

      一些可能性:

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

      【讨论】:

        猜你喜欢
        • 2018-04-04
        • 2017-10-09
        • 2013-11-04
        • 2016-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多