mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 00:03:57 -04:00 
			
		
		
		
	Inserting 5 characters into char(10) does not produce 5 padding spaces
if they are two-byte multibyte characters. Same thing can be happen if octet_length(multibyte_chars) == n where n is char(n). Long standing bug since 7.3 days. Per report and fix from Yoshiyuki Asaba.
This commit is contained in:
		
							parent
							
								
									11a0c3741f
								
							
						
					
					
						commit
						a90e9d662e
					
				| @ -8,7 +8,7 @@ | ||||
|  * | ||||
|  * | ||||
|  * IDENTIFICATION | ||||
|  *	  $PostgreSQL: pgsql/src/backend/parser/parse_expr.c,v 1.181 2005/04/06 16:34:06 tgl Exp $ | ||||
|  *	  $PostgreSQL: pgsql/src/backend/parser/parse_expr.c,v 1.182 2005/05/24 15:45:34 ishii Exp $ | ||||
|  * | ||||
|  *------------------------------------------------------------------------- | ||||
|  */ | ||||
| @ -18,6 +18,7 @@ | ||||
| #include "catalog/pg_operator.h" | ||||
| #include "catalog/pg_proc.h" | ||||
| #include "commands/dbcommands.h" | ||||
| #include "mb/pg_wchar.h" | ||||
| #include "miscadmin.h" | ||||
| #include "nodes/makefuncs.h" | ||||
| #include "nodes/params.h" | ||||
| @ -34,7 +35,6 @@ | ||||
| #include "utils/lsyscache.h" | ||||
| #include "utils/syscache.h" | ||||
| 
 | ||||
| 
 | ||||
| bool		Transform_null_equals = false; | ||||
| 
 | ||||
| static Node *transformParamRef(ParseState *pstate, ParamRef *pref); | ||||
| @ -1553,7 +1553,13 @@ exprTypmod(Node *expr) | ||||
| 				{ | ||||
| 					case BPCHAROID: | ||||
| 						if (!con->constisnull) | ||||
| 							return VARSIZE(DatumGetPointer(con->constvalue)); | ||||
| 						{ | ||||
| 							int32 len = VARSIZE(DatumGetPointer(con->constvalue)) - VARHDRSZ; | ||||
| 
 | ||||
| 							if (pg_database_encoding_max_length() > 1) | ||||
| 								len = pg_mbstrlen_with_len(VARDATA(DatumGetPointer(con->constvalue)), len); | ||||
| 							return len + VARHDRSZ; | ||||
| 						} | ||||
| 						break; | ||||
| 					default: | ||||
| 						break; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user