2013-03-24 70 views
0

在以下查询中有什么不正确?MySQL分区。分区函数返回错误类型

CREATE TABLE `tbl_user_geolocation` (
      `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'Идентификатор', 
      `user_id` VARCHAR(100) NOT NULL COMMENT 'ID пользователя', 
      `client_type` VARCHAR(38) NULL DEFAULT NULL COMMENT 'Тип клиента', 
      `lat` DECIMAL(28,8) NOT NULL COMMENT 'Широта', 
      `lon` DECIMAL(28,8) NOT NULL COMMENT 'Долгота', 
      `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Дата создания', 
      PRIMARY KEY (`id`, `user_id`) 
     ) 
     PARTITION BY HASH(id+user_id) PARTITIONS 200; 

错误:分区函数返回错误的类型。 1491. 此表格用于保存用户的地理位置数据

回答

3

您需要将整数传递给HASH函数。但在你的情况user_idVARCHAR类型。

18.2.3. HASH Partitioning

To partition a table using HASH partitioning, it is necessary to append to the CREATE TABLE statement a PARTITION BY HASH (expr) clause, where expr is an expression that returns an integer.

+0

只是为了好奇,为什么散列函数需要一个整数? varchar也可以应用散列函数。 – MrROY 2013-07-24 16:36:10