MySQL castr 运算符

标签 mysql casting

下面的查询是否有任何更短的等价物:(我不能改变表)。转换运算符在这里适用吗?

select convert(old_text using utf8) as text,
   convert(rev_timestamp using utf8) as ts,
   convert(rev_user_text using utf8) as user from revision;

更新:表架构是:

CREATE TABLE `revision` (
    `rev_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `rev_page` INT(10) UNSIGNED NOT NULL,
    `rev_text_id` INT(10) UNSIGNED NOT NULL,
    `rev_comment` TINYBLOB NOT NULL,
    `rev_user` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    `rev_user_text` VARCHAR(255) NOT NULL DEFAULT '' COLLATE 'latin1_bin',
    `rev_timestamp` BINARY(14) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0',
`old_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`old_text` MEDIUMBLOB NOT NULL,
`old_flags` TINYBLOB NOT NULL,
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB

最佳答案

最好是改变你的表并为你需要的列设置 utf8 而不是每次都转换它们

    ALTER TABLE t MODIFY old_text CHAR(50) CHARACTER SET utf8;
    ALTER TABLE t MODIFY rev_timestamp CHAR(50) CHARACTER SET utf8;
    ALTER TABLE t MODIFY rev_user_text CHAR(50) CHARACTER SET utf8;

然后正常选择它们。

select old_text  as text, rev_timestamp  as ts, rev_user_text as user 
from revision;

注意:关于char(50)根据自己的需要更改。

关于MySQL castr 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18958280/

相关文章:

php - 如何计算并显示二进制上的所有左子和右子

java - 方法传递和内部方法的不同字符转换行为

Java 从 LocalDateTime Bar 中减去 LocalDateTime foo

types - 创建一个不能被基类型替代的新类型

mysql - ON DUPLICATE KEY UPDATE 拒绝更新

mysql - 使用相同表的值更新表

Java - 如何避免在 divide 和 cast to int 期间丢失精度?

c - 为什么对数组使用 `(char *[])` 而不是 `(char [][7])` 有效?

mysql - #1093 - 表被指定了两次,既作为 'UPDATE' 的目标又作为数据的单独源

mysql - 如何选择之前未使用过的唯一ID