查找值为%1%的数据库的所有列

mw3dktmi  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(352)

如何执行此sql查询?
名称数据库:数据库1
列:排序规则
值:拉丁文1\u瑞典语\u ci
我需要所有“database_1”表的列表,这些表的列的值包含文本%1%。
我的最终目标是:我需要更改包含此数据的所有表中的这些值,例如:

CHARACTER SET latin1 COLLATE latin1_swedish_ci

更改为:

CHARACTER SET utf8 COLLATE utf8_unicode_ci

我已经准备好替换:

ALTER TABLE `blog_sitemapconf` CHANGE `value` `value` VARCHAR(100) CHARACTER SET latin1 COLLATE latin1_english_ci NOT NULL DEFAULT '';

但是我需要得到所有包含列的表的名称

CHARACTER SET latin1 COLLATE latin1_swedish_ci
13z8s7eq

13z8s7eq1#

首先,确定如何进行字符集转换。如果表格正确编码为拉丁文1,则这是所需的转换:

ALTER TABLE tbl CONVERT TO CHARACTER SET utf8;

相反,如果utf8字节存储在latin1列中,那么“fix”就更复杂了。
然而,这一切都改变了 CHAR / TEXT 表中的列。可以吗?
如果这是确定的,那么这将生成所有 ALTERs .

SELECT DISTINCT
       CONCAT("ALTER TABLE ", table_schema, ".", table_name,
              " CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;")
    FROM   information_schema.columns
    WHERE  character_set = 'latin1'
      AND  table_schema NOT IN ('mysql', 'information_schema', 'performance_schema');

然后可以将它们复制/粘贴到mysql命令行工具中。
如果只需要更改单个列,那么修复是困难的,因为每个列的其余属性必须重复。这在查询中不容易做到。

5t7ly7z5

5t7ly7z52#

您可以从 information_schema.columns 表格:

SELECT table_name, column_name
FROM   information_schema.columns
WHERE  collation_name LIKE '%latin1%'

相关问题