@@ -131,7 +131,6 @@ class Teradata extends Common
131131 const DEFAULT_NON_LATIN_CLOB_LENGTH = '999M ' ;
132132 const DEFAULT_SECOND_PRECISION_LENGTH = 6 ;
133133 const DEFAULT_VALUE_TO_SECOND_PRECISION_LENGTH = '4,6 ' ;
134-
135134 // types where length isnt at the end of the type
136135 const COMPLEX_LENGTH_DICT = [
137136 self ::TYPE_TIME_WITH_ZONE => 'TIME (%d) WITH TIME ZONE ' ,
@@ -194,6 +193,21 @@ class Teradata extends Common
194193 self ::TYPE_INTERVAL_SECOND ,
195194
196195 ];
196+
197+ // types where CHARAET can be defined
198+ const CHARACTER_SET_TYPES = [
199+ self ::TYPE_CHAR ,
200+ self ::TYPE_VARCHAR ,
201+ self ::TYPE_CLOB ,
202+
203+ self ::TYPE_CHAR ,
204+ self ::TYPE_CHARV ,
205+ self ::TYPE_CHARACTERV ,
206+ self ::TYPE_VARGRAPHIC ,
207+ self ::TYPE_LONG_VARCHAR ,
208+ self ::TYPE_LONG_VARGRAPHIC ,
209+ self ::TYPE_CHARACTER_LARGE_OBJECT ,
210+ ];
197211 //https://docs.teradata.com/r/rgAb27O_xRmMVc_aQq2VGw/6CYL2QcAvXykzEc8mG__Xg
198212 const CODE_TO_TYPE = [
199213 'I8 ' => self ::TYPE_BIGINT ,
@@ -290,12 +304,13 @@ class Teradata extends Common
290304
291305 /** @var bool */
292306 private $ isLatin = false ;
307+
293308 // depends on Char Type column in HELP TABLE column
294309 // 1 latin, 2 unicode, 3 kanjiSJIS, 4 graphic, 5 graphic, 0 others
295310
296311 /**
297312 * @param string $type
298- * @param array $options -- length, nullable, default
313+ * @param array $options -- length, nullable, default
299314 * @throws InvalidLengthException
300315 * @throws InvalidOptionException
301316 * @throws InvalidTypeException
@@ -329,7 +344,6 @@ public static function convertCodeToType($code)
329344 return self ::CODE_TO_TYPE [$ code ];
330345 }
331346
332-
333347 /**
334348 * @return string
335349 */
@@ -356,6 +370,11 @@ public function getSQLDefinition()
356370 if ($ this ->getDefault () !== null ) {
357371 $ definition .= ' DEFAULT ' . $ this ->getDefault ();
358372 }
373+
374+ if (in_array ($ this ->getType (), self ::CHARACTER_SET_TYPES , true )) {
375+ $ definition .= ' CHARACTER SET ' . ($ this ->isLatin () ? 'LATIN ' : 'UNICODE ' );
376+ }
377+
359378 return $ definition ;
360379 }
361380
@@ -395,7 +414,7 @@ private function getDefaultLength()
395414 case self ::TYPE_DECIMAL :
396415 case self ::TYPE_NUMERIC :
397416 case self ::TYPE_DEC :
398- // number
417+ // number
399418 case self ::TYPE_NUMBER :
400419 $ out = self ::DEFAULT_DECIMAL_LENGTH ;
401420 break ;
@@ -458,7 +477,6 @@ private function getDefaultLength()
458477 return $ out ;
459478 }
460479
461-
462480 /**
463481 * @return array
464482 */
@@ -484,7 +502,7 @@ private function validateType($type)
484502 }
485503
486504 /**
487- * @param string $type
505+ * @param string $type
488506 * @param string|null $length
489507 * @return void
490508 * @throws InvalidLengthException
0 commit comments