MySQL의 ENUM 유형 열에 구성원을 추가하려면 어떻게 해야 합니까?
MySQL 참조 매뉴얼에서는 이 방법에 대한 명확한 예를 제공하지 않습니다.
더 많은 국가를 추가해야 하는 국가 이름의 ENUM 유형 열이 있습니다.이를 실현하기 위한 올바른 MySQL 구문은 무엇입니까?
제 시도는 이렇습니다.
ALTER TABLE carmake CHANGE country country ENUM('Sweden','Malaysia');
오류는 '오류다'입니다.ERROR 1265 (01000): Data truncated for column 'country' at row 1.
country
의 스테이트먼트입니다.
테이블 생성 출력 표시:
mysql> SHOW CREATE TABLE carmake;
+---------+---------------------------------------------------------------------+
| Table | Create Table
+---------+---------------------------------------------------------------------+
| carmake | CREATE TABLE `carmake` (
`carmake_id` tinyint(4) NOT NULL AUTO_INCREMENT,
`name` tinytext,
`country` enum('Japan','USA','England','Australia','Germany','France','Italy','Spain','Czech Republic','China','South Korea','India') DEFAULT NULL,
PRIMARY KEY (`carmake_id`),
KEY `name` (`name`(3))
) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=latin1 |
+---------+---------------------------------------------------------------------+
1 row in set (0.00 sec)
카메이크 출력에서 국가 구분 선택:
+----------------+
| country |
+----------------+
| Italy |
| Germany |
| England |
| USA |
| France |
| South Korea |
| NULL |
| Australia |
| Spain |
| Czech Republic |
+----------------+
ALTER TABLE
`table_name`
MODIFY COLUMN
`column_name2` enum(
'existing_value1',
'existing_value2',
'new_value1',
'new_value2'
)
NOT NULL AFTER `column_name1`;
네 코드가 통한다.테스트 케이스는 다음과 같습니다.
mysql> CREATE TABLE carmake (country ENUM('Canada', 'United States'));
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW CREATE TABLE carmake;
+---------+-------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+-------------------------------------------------------------------------------------------------------------------------+
| carmake | CREATE TABLE `carmake` (
`country` enum('Canada','United States') default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+---------+-------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> ALTER TABLE carmake CHANGE country country ENUM('Sweden','Malaysia');
Query OK, 0 rows affected (0.53 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> SHOW CREATE TABLE carmake;
+---------+--------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+--------------------------------------------------------------------------------------------------------------------+
| carmake | CREATE TABLE `carmake` (
`country` enum('Sweden','Malaysia') default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+---------+--------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
어떤 에러가 표시됩니까?
FWIW도 동작합니다.
ALTER TABLE carmake MODIFY COLUMN country ENUM('Sweden','Malaysia');
나는 실제로 열거형 열보다는 국가 표를 추천할 것이다.당신은 꽤 크고 어색한 숫자를 만들 수 있는 수백 개의 나라가 있을지도 모른다.
편집: 이제 오류 메시지를 볼 수 있습니다.
ERROR 1265 (01000): Data truncated for column 'country' at row 1.
에는 당신의 국가 컬럼에 되지 않는 몇 것 .ENUM
아, 음음?
SELECT DISTINCT country FROM carmake;
다른 편집: 다음 명령어의 출력은 무엇입니까?
SHOW VARIABLES LIKE 'sql_mode';
그요? it it ?STRICT_TRANS_TABLES
★★★★★★★★★★★★★★★★★」STRICT_ALL_TABLES
MySQL이 수 이 경우 MySQL이 일반적으로 경고하는 것이 아니라 오류가 발생할 수 있습니다.
그러나 다른 편집: 좋습니다. 이제 테이블에 새로운 값이 없는 것이 분명합니다.ENUM
★★★★★★★★★★★★★★★★★★★ ★ENUM
에서는, 「이행하다」.'Sweden'
★★★★★★★★★★★★★★★★★」'Malaysia'
에는 「」가 있습니다'USA'
,'India'
그리고 다른 몇 개.
최종 편집(가능):난 네가 이걸 하려고 한다고 생각해.
ALTER TABLE carmake CHANGE country country ENUM('Italy', 'Germany', 'England', 'USA', 'France', 'South Korea', 'Australia', 'Spain', 'Czech Republic', 'Sweden', 'Malaysia') DEFAULT NULL;
중요사항: 레거시 답변입니다.
제가 아삽과 나눈 토론은 우리가 꽤 많이 오갔기 때문에 이해하기 어려울 수도 있습니다.
향후 유사한 상황에 직면할 수 있는 다른 사람들에게 다음과 같은 혜택을 줄 수 있도록 우리의 담론의 최종 결과를 명확히 할 수 있을 것이라고 생각했다.
ENUM
-타입 기둥은 조작이 매우 어려운 짐승입니다.저는 제 ENUM의 기존 국가 집합에 두 나라(말레이시아와 스웨덴)를 추가하고 싶었습니다.
MySQL 5.1(실행 중인 것)은 원하는 것 외에 기존 세트를 재정의해야만 ENUM을 업데이트할 수 있는 것 같습니다.
이것은 동작하지 않았습니다.
ALTER TABLE carmake CHANGE country country ENUM('Sweden','Malaysia') DEFAULT NULL;
을 MySQL ENUM 엔트리를 하는 엔트리로 입니다.'Malaysia'
★★★★★★★★★★★★★★★★★」'Sweden'
를 발생시킨 MySQL 뿐입니다.carmake
'아까보다'와 같은 .'England'
그리고.'USA'
그것은 새로운 것의 일부가 아니었다.ENUM
의 정의입니다.
놀랍게도 다음 항목도 작동하지 않았습니다.
ALTER TABLE carmake CHANGE country country ENUM('Australia','England','USA'...'Sweden','Malaysia') DEFAULT NULL;
기존 요소의 순서조차ENUM
새 멤버를 추가할 때 보존해야 합니다.그래서 만약 나의 기존이ENUM
처럼 보이다ENUM('England','USA')
, 그러면 나의 새것ENUM
로 정의되어야 한다.ENUM('England','USA','Sweden','Malaysia')
가 아니라ENUM('USA','England','Sweden','Malaysia')
이 문제는 기존 테이블에 를 사용하는 레코드가 있는 경우에만 나타납니다.'USA'
또는'England'
가치.
결론:
사용만ENUM
정의된 멤버 세트가 변경되지 않을 경우.그렇지 않으면 조회 테이블을 업데이트 및 수정하기가 훨씬 쉬워집니다.
MYSQL 서버 버전 5.0.27에서 이것을 시도했더니, 당신의 버전을 확인했습니다.
ALTER TABLE carmake
MODIFY `country` ENUM('Japan', 'USA', 'England', 'Australia', 'Germany', 'France', 'Italy', 'Spain', 'Czech Republic', 'China', 'South Korea', 'India', 'Sweden', 'Malaysia');
여기 또 다른 방법이 있습니다...
테이블 "firmas"의 열 "rtipo"의 열거형 정의에 "others"를 추가합니다.
set @new_enum = 'others';
set @table_name = 'firmas';
set @column_name = 'rtipo';
select column_type into @tmp from information_schema.columns
where table_name = @table_name and column_name=@column_name;
set @tmp = insert(@tmp, instr(@tmp,')'), 0, concat(',\'', @new_enum, '\'') );
set @tmp = concat('alter table ', @table_name, ' modify ', @column_name, ' ', @tmp);
prepare stmt from @tmp;
execute stmt;
deallocate prepare stmt;
참고: 유용한 시뮬레이션 도구 - phpMyAdmin with Wampserver 3.0.6 - Preview SQL: "Preview SQL"을 사용하여 열을 저장하기 전에 생성되는 SQL 코드를 확인합니다.SQL 미리보기
위에 표시된 것처럼 ENUM에 'Ford' 'Toyota'를 입력했지만 구문 오류를 생성하는 구문 ENUM(0)이 표시됩니다. 쿼리 오류 1064#
그런 다음 SQL을 복사하여 붙여넣고 변경하여 SQL을 통해 실행함으로써 긍정적인 결과를 얻을 수 있습니다.
이것은 자주 사용하는 퀵픽스로 변경이 필요한 기존 ENUM 값에도 사용할 수 있습니다.이게 도움이 될 것 같아서요
mysql data truncated for column 'status' at row 1 enum
이전 값이 레코드에 있고 변경된 ENUM이 해당 값을 포함하지 않는 경우 새 열거 값을 추가하는 동안 위의 오류가 발생할 수 있습니다.
당신이 믿는다면 가능합니다.헤헤, 이 암호를 써 봐
public function add_new_enum($new_value)
{
$table="product";
$column="category";
$row = $this->db->query("SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = ? AND COLUMN_NAME = ?", array($table, $column))->row_array();
$old_category = array();
$new_category="";
foreach (explode(',', str_replace("'", '', substr($row['COLUMN_TYPE'], 5, (strlen($row['COLUMN_TYPE']) - 6)))) as $val)
{
//getting the old category first
$old_category[$val] = $val;
$new_category.="'".$old_category[$val]."'".",";
}
//after the end of foreach, add the $new_value to $new_category
$new_category.="'".$new_value."'";
//Then alter the table column with the new enum
$this->db->query("ALTER TABLE product CHANGE category category ENUM($new_category)");
}
언급URL : https://stackoverflow.com/questions/1501958/how-do-i-add-more-members-to-my-enum-type-column-in-mysql
'IT' 카테고리의 다른 글
javascript를 클릭하면 브라우저가 이전 페이지로 돌아갑니다. (0) | 2022.10.19 |
---|---|
MySQL: [.character.]의 REGEX가 작동하지 않습니다(POSIX 대조 요소는 지원되지 않습니다). (0) | 2022.10.19 |
EL에서 부울 상태를 확인하는 방법은 무엇입니까? (0) | 2022.10.19 |
상대 Import에서 최상위 패키지 오류를 초과합니다. (0) | 2022.10.19 |
MySQL에서 동일한 테이블에 행 삽입 (0) | 2022.10.19 |